<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- saved from url=(0056)http://oreilly.com/catalog/errata.csp?isbn=9780596158118 -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
li.GlobalNavInfo.right { width: 145px; }
</style>




<!--chartbeat-->
<script src="./Programming Python Confirmed Errata  --fulll_files/6381.js" async="" type="text/javascript"></script><script src="./Programming Python Confirmed Errata  --fulll_files/cb=gapi.loaded_0" async=""></script><script type="text/javascript" async="" src="./Programming Python Confirmed Errata  --fulll_files/ga.js"></script><script type="text/javascript">var _sf_startpt=(new Date()).getTime()</script>


	<title>Programming Python Confirmed Errata | O'Reilly Media</title>
	<meta name="keywords" content=",O&#39;Reilly Media">
	<meta name="description" content="The errata list is a list of errors and their corrections that were found after the book was printed. The following errata were submitted by our readers and approved as valid errors by the book&#39;s author...">
	<meta name="date" content="Aug. 08, 2008">
	<meta name="search_date" content="2008-08-08">
	<meta name="pagename" content="Confirmed Errata | O&#39;Reilly Media">
	<meta name="site" content="O&#39;Reilly Network">
	<meta name="subtitle" content="">
	<meta name="author" content=" ">
<meta name="target" content="">
	<meta name="twitter:card" content="summary">
	<meta name="twitter:title" content="Confirmed Errata | O&#39;Reilly Media">
	<meta name="twitter:description" content="The errata list is a list of errors and their corrections that were found after the book was printed. The following errata were submitted by our readers and approved as valid errors by the book&#39;s author...">
	<meta name="twitter:site" content="@OReillyMedia">







<link href="./Programming Python Confirmed Errata  --fulll_files/Programming Python Confirmed Errata  --fulll.htm" rel="canonical"><meta name="twitter:url" content="http://oreilly.com/catalog/errata.csp?isbn=9780596158118">
<!-- feed autodiscovery links -->
<link rel="alternate" type="application/atom+xml" title="New Titles Feed" href="http://feeds.feedburner.com/oreilly/newbooks">
<link rel="alternate" type="application/atom+xml" title="Upcoming Titles Feed" href="http://feeds.feedburner.com/oreilly/upcomingbooks">
<link rel="alternate" type="application/atom+xml" title="O&#39;Reilly Ebook Deal of the Day Feed" href="http://feeds.feedburner.com/oreilly/ebookdealoftheday">





<!--Auto Complete CSS (see footer for autocomplete scripts, including call to autocomplete_data.js file) -->
<link rel="stylesheet" type="text/css" href="./Programming Python Confirmed Errata  --fulll_files/autocomplete_styles.css">
<!--ML Scripts and CSS-->

<script type="text/javascript" src="./Programming Python Confirmed Errata  --fulll_files/jquery.min.js"></script>

<link rel="stylesheet" type="text/css" href="./Programming Python Confirmed Errata  --fulll_files/stylesheet.css">

<!-- Matthew's new nav.css -->
<link rel="stylesheet" type="text/css" media="screen" href="./Programming Python Confirmed Errata  --fulll_files/nav.css">

<!--MyBUYS Header -->
<!-- MyBuys libraries and style sheet -->
<link href="./Programming Python Confirmed Errata  --fulll_files/mbstyles.css" type="text/css" rel="stylesheet" id="mybuysstyles">
<script type="text/javascript" src="./Programming Python Confirmed Errata  --fulll_files/mybuys3.js"></script><style type="text/css">.mblistrowleft{ cssFloat:;text-align:;} .mblistrowright{ cssFloat:;text-align:;} .mbsalerowleft{ cssFloat:;text-align:;} .mbsalerowright{ cssFloat:;text-align:;} .mbpricerowleft{ cssFloat:;text-align:;} .mbpricerowright{ cssFloat:;text-align:;} .mbdiscrowleft{ cssFloat:;text-align:;} .mbdiscrowright{ cssFloat:;text-align:;} </style>
<script type="text/javascript" src="./Programming Python Confirmed Errata  --fulll_files/setup.js"></script><style type="text/css">.mbpricerowleft{ cssFloat:;} .mbpricerowright{ cssFloat:;} .mbzone{ width:100%;padding:0 10px;} .mbitem{ width:100%;padding-right:0px;padding-left:0px;padding-top:5px;} .mbnamelink:link{ color:#0000ff;font-size:11px;font-weight:bold;text-decoration:none;font-family:verdana, arial, helvetica;} .mbnamelink:visited{ font-family:verdana, arial, helvetica;color:#551A8B;font-size:11px;font-weight:bold;text-decoration:none;} .mbnamelink:hover{ font-family:verdana, arial, helvetica;color:#0000ff;font-size:11px;font-weight:bold;text-decoration:none;} .mbnamerowspan{ margin-top:5px;} .mbpricelink:link{ font-family:verdana, arial, helvetica;color:#222222;font-size:11px;font-weight:normal;text-decoration:none;} .mbpricelink:visited{ font-family:verdana, arial, helvetica;color:#222222;font-size:11px;font-weight:normal;text-decoration:none;} .mbpricelink:hover{ font-family:verdana, arial, helvetica;color:#222222;font-size:11px;font-weight:normal;text-decoration:none;} .mbpricerowspan{ text-align:center;} .mbpricelinklabel:link{ font-family:verdana, arial, helvetica;color:#222222;font-size:11px;font-weight:normal;text-decoration:none;} .mbpricelinklabel:visited{ font-family:verdana, arial, helvetica;color:#222222;font-size:11px;font-weight:normal;text-decoration:none;} .mbpricelinklabel:hover{ font-family:verdana, arial, helvetica;color:#222222;font-size:11px;font-weight:normal;text-decoration:none;} } .mbpricerowleft_content1{ cssFloat:none;text-align:right;height:12px;} .mbpricerowright_content1{ cssFloat:none;text-align:center;height:12px;} .mbitem_content1{ font-size:11px;width:100%;padding-bottom:26px;text-align:left;} .mbnamerowspan_content1{ text-align:left;cssFloat:left;width:100%;display:block;margin-top:5px;} .mbpricerowspan_content1{ text-align:left;cssFloat:left;width:100%;display:block;height:16px;} .mbpricelink_content1:link{ font-family:verdana, arial, helvetica, sans-serif;color:#000000;font-size:11px;font-weight:normal;text-decoration:none;} .mbpricelink_content1:visited{ font-family:verdana, arial, helvetica, sans-serif;color:#000000;font-size:11px;font-weight:normal;text-decoration:none;} .mbpricelink_content1:hover{ font-family:verdana, arial, helvetica, sans-serif;color:#000000;font-size:11px;font-weight:normal;text-decoration:none;} .mbzone2 .mbzonetitle{ color:#333333;font-size:13px;font-weight:bold;font-family:arial, helvetica, verdana;} .mbzone2 .mblegend{ border-bottom:1px solid #D9D9D9;background-color:#d7d7d7;} .mbzone2 .mbitem{ margin:5px 0px 10px 0px;} .mbzone2 .mbnamelink:link{ color:#207CC1;font-size:14px;font-weight:bold;text-decoration:none;font-family:arial, helvetica, verdana;} .mbzone2 .mbnamelink:visited{ color:#207CC1;font-size:14px;font-weight:bold;text-decoration:none;font-family:arial, helvetica, verdana;} .mbzone2 .mbnamelink:hover{ color:#207CC1;font-size:14px;font-weight:bold;text-decoration:underline;font-family:arial, helvetica, verdana;} .mbzone2 .mbpricerowspan{ color:#333333;font-size:12px;font-weight:bold;} .mbzone2 .mbpricelink:link{ font-family:arial, helvetica, verdana;color:#333333;font-size:12px;font-weight:bold;text-decoration:none;} .mbzone2 .mbpricelink:visited{ font-family:arial, helvetica, verdana;color:#333333;font-size:12px;font-weight:bold;text-decoration:none;} .mbzone2 .mbpricelink:hover{ font-family:arial, helvetica, verdana;color:#333333;font-size:12px;font-weight:bold;text-decoration:none;} .mbzone2 .mbpricelinklabel:link{ font-family:arial, helvetica, verdana;color:#333333;font-size:12px;font-weight:normal;text-decoration:none;} .mbzone2 .mbpricelinklabel:visited{ font-family:arial, helvetica, verdana;color:#333333;font-size:12px;font-weight:normal;text-decoration:none;} .mbzone2 .mbpricelinklabel:hover{ font-family:arial, helvetica, verdana;color:#333333;font-size:12px;font-weight:normal;text-decoration:none;} </style>
<!-- End MyBuys libraries and style sheet -->



<!-- common javascript and analytics -->

<script language="JavaScript" type="text/javascript" src="./Programming Python Confirmed Errata  --fulll_files/engine.js"></script>
<script language="JavaScript" type="text/javascript" src="./Programming Python Confirmed Errata  --fulll_files/common.js"></script>


<!-- path_info: /catalog/errata.csp -->
<!-- table: catalog - ref_id: errata.csp -->
<!-- table: catalog - ref_id: catalog/errata.csp -->
<!-- table: csp - ref_id: /catalog/errata.csp - cs_rid: 1195 -->
<!-- 0 domain: www.oreilly.com - path_info: catalog/errata.csp -->
<!-- 1 domain: www.oreilly.com - path_info: catalog/errata.csp -->
<!-- 2 domain: www.oreilly.com - path_info: catalog/errata.csp -->
<!-- 3 domain: www.oreilly.com - path_info: catalog/errata.csp -->
<!-- 4 domain: oreilly.com - path_info: catalog/errata.csp -->
<!-- 5 domain: oreilly - path_info: catalog/errata.csp -->
<!-- 6 domain: oreilly - path_info: catalog/errata.csp s_channel: oreilly -->
<!-- 7 domain: oreilly - path_info: catalog/errata.csp -->
<!-- 8 domain: www.oreilly.com - path_info: catalog/errata.csp -->

<script language="JavaScript" type="text/javascript"><!--
var s_account="ororeilly,orglobal"
//--></script>
<!-- SiteCatalyst code version: H.20.2. Copyright 1997-2009 Omniture, Inc. More info available at http://www.omniture.com  -->
<script language="JavaScript" type="text/javascript" src="./Programming Python Confirmed Errata  --fulll_files/s_code.js"></script>
<script language="JavaScript" type="text/javascript"><!--
s.pageName="oreilly:oreilly:confirmed errata | oreilly media"
s.channel="oreilly"
s.prop1="oreilly:oreilly"
s.prop2="oreilly:oreilly"
s.prop3="oreilly:oreilly"
s.prop4=""
s.prop5="confirmed errata | oreilly media"
s.prop6="n/csp/1195"
s.prop24="08/08/2008"
s.prop21=""
s.hier1="oreilly,oreilly"
/************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/
var s_code=s.t();if(s_code)document.write(s_code)//--></script>
<!-- End SiteCatalyst code version: H.20.2. -->
<!-- analytics.pl: 2013/10/6 13:10:0 -->





<link rel="stylesheet" href="./Programming Python Confirmed Errata  --fulll_files/all-post-ml.css" type="text/css">


<!-- ORM correction to ML styles -->
<link rel="stylesheet" href="./Programming Python Confirmed Errata  --fulll_files/ml.css" type="text/css">
<script type="text/javascript" src="./Programming Python Confirmed Errata  --fulll_files/ml.js"></script>


















<!-- Google Analytics -->
<script type="text/javascript">

var _gaq = _gaq || []; 
_gaq.push(['_setAccount', 'UA-4591498-1']);
_gaq.push(['_setDomainName', 'oreilly.com']);
_gaq.push(['_addIgnoredRef', 'oreilly.com']);
_gaq.push(['_setSiteSpeedSampleRate', 50]);
_gaq.push(['_trackPageview']);

(function() { var ga = document.createElement('script'); ga.type =
'text/javascript'; ga.async = true; ga.src = ('https:' ==
document.location.protocol ? 'https://ssl' : 'http://www') +
'.google-analytics.com/ga.js'; var s =
document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s); })();

</script>


<!--Facebook Insights -->
<meta property="fb:page_id" content="15137500430">


<!-- Start Visual Website Optimizer Asynchronous Code -->
<script type="text/javascript">
var _vwo_code=(function(){
var account_id=27087,
settings_tolerance=2000,
library_tolerance=1500,
use_existing_jquery=false,
// DO NOT EDIT BELOW THIS LINE
f=false,d=document;return{use_existing_jquery:function(){return use_existing_jquery;},library_tolerance:function(){return library_tolerance;},finish:function(){if(!f){f=true;var a=d.getElementById('_vis_opt_path_hides');if(a)a.parentNode.removeChild(a);}},finished:function(){return f;},load:function(a){var b=d.createElement('script');b.src=a;b.type='text/javascript';b.innerText;b.onerror=function(){_vwo_code.finish();};d.getElementsByTagName('head')[0].appendChild(b);},init:function(){settings_timer=setTimeout('_vwo_code.finish()',settings_tolerance);this.load('//dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(d.URL)+'&r='+Math.random());var a=d.createElement('style'),b='body{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}',h=d.getElementsByTagName('head')[0];a.setAttribute('id','_vis_opt_path_hides');a.setAttribute('type','text/css');if(a.styleSheet)a.styleSheet.cssText=b;else a.appendChild(d.createTextNode(b));h.appendChild(a);return settings_timer;}};}());_vwo_settings_timer=_vwo_code.init();
</script><script src="./Programming Python Confirmed Errata  --fulll_files/j.php" type="text/javascript"></script>
<!-- End Visual Website Optimizer Asynchronous Code -->

</head>
<body class="main">

<div id="page">
<!--header-->
	<table width="990" border="0" cellpadding="0" cellspacing="0" class="mainLayoutTable">
		<tbody><tr>
			<td class="navheaderbg">
				<div> <!--TopNav Start-->
					<script type="text/javascript">
					function checkIfDefault(keyword) {
					var defaultSearchTerm = "Search";
					if(keyword==defaultSearchTerm) {
					return '';
					}
					else {
					return keyword;
					}
					}
					</script>
					<div id="header" style="width:990px;">
						<div class="logo">
                                               
                                               <a href="http://shop.oreilly.com/"><img src="./Programming Python Confirmed Errata  --fulll_files/logo01.gif" border="0" alt="O&#39;Reilly Media, Inc. - Books and Videos"></a>
                                               
                                              
                                               
                                               
                                               
                                               
                                               

                                               

                                               
                                               
                                               
                                               
						</div> <!--logo end-->
						<div class="tools">
							<p><a href="https://members.oreilly.com/" class="signInLinkmy">Your Account</a></p>
							<div id="globalBasket" class="popDownWrapper globalCartWrapper" style=" margin:2px 0px 0px 0px; width:239px;">
								<div class="popDownNav globalCartNav">
									<div class="globalCartBasketImg" style="">
										<img src="./Programming Python Confirmed Errata  --fulll_files/basketicon.gif" border="0" alt="Shopping Cart">

									</div>
									<div class="globalCartBasketInfo" style="">
										<a href="http://shop.oreilly.com/basket.do"><span class="navHeader">Shopping Cart</span></a>
									</div>
								</div> <!--popDownNav globalCartNav end-->
							</div> <!--globalBasket-->						
						</div> <!--tools end-->
                                               

					<div id="search-box" class="yui-skin-sam">
						<form name="searchform" method="get" id="search-form" action="http://search.oreilly.com/">
							<div class="search">
								<fieldset>
									<span id="search-input">
										<div class="searchInput">
											<span id="search-field"><input type="text" value="Search" name="q" maxlength="64" id="q" onfocus="this.value=checkIfDefault(this.value);" class="yui-ac-input" autocomplete="off"></span>			
										</div>
										<span id="search-button">
											<input type="image" value="SEARCH" src="./Programming Python Confirmed Errata  --fulll_files/search_btn.gif" border="0" style="float:left" alt="Search" align="top">
			
        										
										</span>
									</span>
 <div id="autocomplete" class="yui-ac-container"><div class="yui-ac-content" style="display: none;"><div class="yui-ac-hd" style="display: none;"></div><div class="yui-ac-bd"><ul><li style="display: none;"></li><li style="display: none;"></li><li style="display: none;"></li><li style="display: none;"></li><li style="display: none;"></li><li style="display: none;"></li><li style="display: none;"></li><li style="display: none;"></li><li style="display: none;"></li><li style="display: none;"></li></ul></div><div class="yui-ac-ft" style="display: none;"></div></div></div>
								</fieldset>
							</div><!--search-->
						</form>
					</div><!--search-box-->


				</div> <!--Header End-->

  

  

  
    <!--[if lt IE 9]>
  <script>
    'article aside footer header nav section time'.replace(/\w+/g,function(n){document.createElement(n)})
  </script>
<![endif]-->


<!-- Nav CSS -->
<!-- Not Needed for Actual Site -->
<style type="text/css">

  nav a { text-decoration:none; }
  nav a:hover { text-decoration:underline; }

  nav p { margin:0 0 10px; }
  nav .fsl { font-size:16px; }
  nav .fsxl { font-size:24px; line-height:1.1em; }
  nav .fwb { font-weight:bold; }
  nav .fc-highlight { color:#b9002d; }
  nav .fc-dark { color:#222; }
  nav .fc-light { color:#fff; }
  nav .nm { margin:0; }
  nav .mb { margin-bottom:10px; }
  nav .mr { margin-right:10px; }
  nav .floatl { float:left; }
  nav .clear { clear:both; }

  nav  a.btn-green-arrow { display:block; float:left; padding:5px 10px 5px 22px; line-height:22px; font-size:20px; font-weight:bold; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; border:1px solid #f2ba12; color:#222; background: rgb(247,209,69); background: url(); background: -moz-linear-gradient(top,  rgba(247,209,69,1) 50%, rgba(245,197,23,1) 50%); background: -webkit-gradient(linear, left top, left bottom, color-stop(50%,rgba(247,209,69,1)), color-stop(50%,rgba(245,197,23,1))); background: -webkit-linear-gradient(top, rgba(247,209,69,1) 50%,rgba(245,197,23,1) 50%); background: -o-linear-gradient(top, rgba(247,209,69,1) 50%,rgba(245,197,23,1) 50%); background: -ms-linear-gradient(top, rgba(247,209,69,1) 50%,rgba(245,197,23,1) 50%); background: linear-gradient(to bottom,  rgba(247,209,69,1) 50%,rgba(245,197,23,1) 50%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f7d145', endColorstr='#f5c517',GradientType=0 ); }
  nav a.btn-green-arrow:hover { text-decoration:none; }
  nav a.btn-green-arrow .arrow { display:block; min-height:18px; background:transparent url(//cdn.oreillystatic.com/oreilly/images/btn-green-arrow-overlay.png) left center no-repeat; margin:0 0 0 -25px; padding:0 0 0 25px; }
  nav a.btn-green-arrow.small { font-size:13px; line-height:18px;  padding:5px 10px 5px 22px !important; }

  ul#primarynav, #sf-menu-text-nav { display:none; }
</style>

<!-- Styles for page -->
<style type="text/css">
  /* Reset for browsers that don't automatically set semantic tags to block */
  article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section { display:block; }

  nav .self-clear:after { content:""; display:block; clear:both; height:0; }

#globalInclude { text-align:left !important; }
</style>


<!-- Nav Styles -->
<style type="text/css">
  nav { font-size:13px; }
  nav ul { list-style:none; margin:0; padding:0; }
  nav ul:after { content:''; display:block; clear:both; height:0; width:100%; }
  nav li { display:block; float:left; border-right:1px solid #ddd; line-height:1.4em; }
  nav li:last-child { border-right:0; }
  nav li > a { display:block; padding:8px 15px 7px; }
  nav li > a:hover { text-decoration:none; }
  nav li > a.category { font-size:16px; color:#b9002d !important; }

  nav ul#global-nav {
    display:block;
    background:#eee;
    background:-moz-linear-gradient(top, #fbfbfb 0%, #eeeeee 100%);
    background:-webkit-gradient(linear, left top, left bottom, color-stop(0%,#fbfbfb), color-stop(100%,#eeeeee));
    background:-webkit-linear-gradient(top, #fbfbfb 0%,#eeeeee 100%);
    background:-o-linear-gradient(top, #fbfbfb 0%,#eeeeee 100%);
    background:-ms-linear-gradient(top, #fbfbfb 0%,#eeeeee 100%);
    background:linear-gradient(to bottom, #fbfbfb 0%,#eeeeee 100%);
    border-top:1px solid #ddd;
    border-bottom:1px solid #ddd;
    height:auto;
    text-align:left;
  }
  nav #global-nav li > a { color:#333; }
  nav #global-nav li > a.current { color:#b9002d; background:#fff; border-bottom:1px solid #fff; margin-bottom:-1px; }
  /* Social Icons in Primary Nav */
  nav #global-nav .social { float:right; padding:9px 15px 0 0; border-right:0; height:auto; position:static; margin:0; }
  nav #global-nav .social .icon { display:block; float:left; padding:0; }
  nav #global-nav .social .icon:before { content:''; display:block; width:16px; height:16px; background-image:url(//cdn.oreillystatic.com/assets/images/social-icons-16.png); margin:0 0 0 8px; font-size:0; }
  nav #global-nav .social .icon.twitter:before { background-position:0 0; }
  nav #global-nav .social .icon.youtube:before { background-position:0 -20px; }
  nav #global-nav .social .icon.facebook:before { background-position:0 -40px; }
  nav #global-nav .social .icon.googleplus:before { background-position:0 -60px; }
  nav #global-nav .social .icon.rss:before { background-position:0 -80px; }


  nav #contextual-nav { display:block; clear:both; padding:0 7px 0; border-bottom:1px solid #ddd; }
  nav #contextual-nav > li { padding:8px 0 7px; position:relative; border-right:0; }
  nav #contextual-nav > li:after { content:''; display:block; top:8px; right:0; position:absolute; height:1.4em; border-right:1px solid #ddd; }
  nav #contextual-nav > li.no-divider:after { display:none; }
  nav #contextual-nav > li > a { color:#b9002d; padding:0; margin:0 8px; }
  nav #contextual-nav > li > a:hover { color:#333; }
  /* Labels in Secondary Nav */
  nav #contextual-nav > li.label { margin:0 0 0 8px; color:#999; }
  nav #contextual-nav > li.label:after { display:none; }
  /* Contacts in Secondary Nav */
  nav #contextual-nav li.contact { float:right; padding:9px 0 7px 0; font-weight:bold; font-size:12px; color:#333; }
  nav #contextual-nav li.contact:after { display:none; }
  nav #contextual-nav li.contact > a { padding:0; margin:0 8px 0 0; display:inline; color:#333; }


  nav li.sub > ul { /*display:none;*/ left:-9999px; top:-9999px; position:absolute; z-index:100; background:#fff; background:rgb(255,255,255); background:rgba(255,255,255,.98); -webkit-box-shadow:1px 1px 1px 0px rgba(0, 0, 0, .3); -moz-box-shadow:1px 1px 1px 0px rgba(0, 0, 0, .3); box-shadow:1px 1px 1px 0px rgba(0, 0, 0, .3); border-left:1px solid #ddd; margin-left:-1px; border:1px solid #ddd\9; border-top:0 solid #ddd\9; margin:0 -1px\9; }
  nav #global-nav > li.sub:hover > ul, nav #contextual-nav > li.sub:hover > ul { top:auto; left:auto; }
  nav ul.vertical > li.sub.hover > ul { top:auto; left:auto; }

  nav #contextual-nav ul.vertical > li.sub.hover > a { position:relative; }
  nav #contextual-nav ul.horizontal > li:hover > a { color:#b9002d; }

  nav #contextual-nav ul.vertical > li.sub.hover > a:after { right:0; border:solid transparent; content:" "; height:0; width:0; position:absolute; pointer-events:none; top:50%; border-color:#fff; border-left-color:#ccc; border-width:6px; margin-top:-6px; }
  nav #global-nav > li.sub:hover .title { background:rgba(255,255,255,.5); }
  nav #global-nav li.sub > ul.vertical li:hover > a, nav #contextual-nav ul li:hover > a { color:#b9002d; }
  nav li.sub > ul.vertical li { clear:both; width:100%; }
  nav li.sub > ul.vertical li:first-child { border-top:1px solid #ddd; } 
  nav #global-nav li.sub > ul.vertical li { border-top:1px solid #ddd; }
  nav li.sub > ul.vertical li:last-child { border-bottom:0; }

  nav #contextual-nav li.sub > ul.vertical { top:100%; border-top:1px solid #ddd; margin-left:-8px; border-left:1 solid #ddd\9; }
  nav #contextual-nav li.sub > ul.vertical > li { padding: 0; border:0; min-width:210px; max-width:300px; }
  nav #contextual-nav li.sub > ul.vertical > li > a, nav #contextual-nav li.sub > ul.horizontal > li > a { padding: 4px 15px 4px; margin-right:-2px; }
  nav #contextual-nav li.sub > ul:before, nav #contextual-nav li.sub > ul:after { content:''; display:block; clear:both; height:7px; }


  nav #contextual-nav li.sub > ul.horizontal { min-height:100%; margin-left:0px; border-top:1px solid #ddd; border-left:1 solid #ddd\9; border-top:0 solid #ddd\9; }
  nav #contextual-nav .vertical > li.sub.hover > ul.horizontal { left:100%; top:-1px; top:0px\9; }
  nav #contextual-nav li > ul li > a { color:#333; }
  nav #contextual-nav > li:hover > a { color:#222; }

  nav #contextual-nav ul.horizontal li { float:none; padding: 0; border:0; width:210px; position:relative; z-index:10; }
</style>


<!-- Advertisement Styles -->
<style type="text/css">
  nav #contextual-nav ul.horizontal li.ad.data { width:425px; min-height:560px; position:absolute; z-index:-1; top:0; bottom:0; left:0; margin-right:-55px; background:transparent url(//cdn.oreillystatic.com/oreilly/promos/ad-data-bg.png) left bottom no-repeat; }

  nav #contextual-nav ul.horizontal li.ad.photography { width:370px; min-height:560px; position:absolute; z-index:-1; top:0; bottom:0; left:0; background:transparent url(//cdn.oreillystatic.com/oreilly/promos/ad-photography-bg.jpg) left bottom no-repeat; }

  nav #contextual-nav ul.horizontal li.ad.programming { width:425px; min-height:585px; position:absolute; z-index:-1; top:0; bottom:0; left:0; margin-bottom:-25px; background:transparent url(//cdn.oreillystatic.com/oreilly/promos/ad-programming-bg.png) left bottom no-repeat; }
</style>


  <!-- Subnav JavaScript -->
  
<script type="text/javascript">

  //Initialize the site subnav dropdown menu
  function initSubNav() {

    var isMobile = (/iPhone|iPod|iPad|Android|BlackBerry|IEMobile|Opera Mini/).test(navigator.userAgent);
    if (isMobile) {
      //Prevent default interaction on clicks of drop-down menu titles
      jQuery('nav').find('.sub > .title').bind('click', function(e) {
        e.preventDefault();
      });
    }

    jQuery('#contextual-nav > .sub').bind('mouseover', function(e) {
      var that = jQuery(this);
      that.addClass('on');
    }).bind('mouseleave', function(e) {
      var that = jQuery(this);
      that.removeClass('on');
      that.find('.sub').removeClass('hover');
    });

    jQuery('nav').find('.vertical > .sub').bind('mouseover', function(e) {
      var that = jQuery(this);
      that.addClass('on');
      setTimeout(function() {
        if (that.hasClass('on')) {
          that.parent().children().removeClass('hover');
          that.addClass('hover');
        }
      },70);
    }).bind('mouseleave', function(e) {
      var that = jQuery(this);
      that.removeClass('on');
    });
  }

  //Break subnav lists into columns where 'split' classes have been added
  function breakNavColumns() {
    jQuery('nav').find('.horizontal').each(function() {
      jQuery(this).find('.split').each(function(i) {
      var category = jQuery(this).parent().find('.category:eq(0)').parent();
      jQuery(this).css('margin-top', - (jQuery(this).position().top - category.position().top - category.height()) + "px");
      jQuery(this).add(jQuery(this).nextAll(':not(.ad)')).css('margin-left', ((1+i) * (5 + jQuery(this).width())) + 'px');
      }); 
    });
  }
  
  //When the document is loaded, initialize the subnav dropdown menu and multi-column subnav lists
  jQuery(document).ready(function(jQuery) {
    breakNavColumns();
    initSubNav();
  });

</script>


<nav role="navigation">
  <ul id="global-nav" role="menubar">
    <li role="menuitem"><a href="http://oreilly.com/">Home</a></li>
    <li role="menuitem"><a href="http://shop.oreilly.com/" class="current">Shop Books &amp; Videos</a></li>
    <li class="sub" aria-haspopup="true" role="menuitem">
      <a href="http://radar.oreilly.com/" class="title">Blogs</a>
      <ul class="vertical" role="menu">
        <li role="menuitem"><a href="http://programming.oreilly.com/">Programming</a></li>
        <li role="menuitem"><a href="http://radar.oreilly.com/">Radar</a></li>
        <li role="menuitem"><a href="http://strata.oreilly.com/">Strata</a></li>
        <li role="menuitem"><a href="http://animals.oreilly.com/">Animals</a></li>
      </ul>
    </li>
    <li role="menuitem"><a href="http://safari.oreilly.com/?cid=orm-nav-global">Safari Books Online</a></li>
    <li role="menuitem"><a href="http://conferences.oreilly.com/">Conferences</a></li>
    <li role="menuitem"><a href="http://www.oreillyschool.com/">IT Courses &amp; Certificates</a></li>
    <li class="social"><a href="http://twitter.com/oreillymedia" class="icon twitter" title="O&#39;Reilly on Twitter"></a><a href="http://www.youtube.com/subscription_center?add_user=oreillymedia" class="icon youtube" title="O&#39;Reilly on YouTube"></a><a href="http://www.facebook.com/OReilly" class="icon facebook" title="O&#39;Reilly on Facebook"></a><a href="https://plus.google.com/+oreillymedia/" class="icon googleplus" title="O&#39;Reilly on Google+"></a><a href="http://oreilly.com/feeds/" class="icon rss" title="Subscribe to Feed"></a></li>
  </ul>

  
    <!-- Store Subnav -->
    <ul id="contextual-nav" role="menubar">
    <li class="sub" aria-haspopup="true" role="menuitem">
      <a class="title" href="http://oreilly.com/category/browse-subjects.do"><span>Browse Subjects</span></a>
      <ul class="vertical" role="menu">
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/apple-mac.do" class="title">Apple</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/apple-mac.do" class="category">Apple</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/apple-mac/apple-apps.do">Apple Apps</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/apple-mac/apple-programming.do">Apple Programming</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/apple-mac/ios-programming.do">iOS Programming</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/apple-mac/ipad-iphone-ipod.do">iPad, iPhone, &amp; iPod</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/apple-mac/mac.do">Mac</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/apps-software.do" class="title">Apps &amp; Software</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/apps-software.do" class="category">Apps &amp; Software</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/apps-software/apple-apps.do">Apple Apps</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/apps-software/design-apps.do">Design Apps</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/apps-software/office-sharepoint.do">Office &amp; SharePoint</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/apps-software/photo-apps.do">Photoshop &amp; Photo Apps</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/apps-software/web-mobile-apps.do">Web &amp; Mobile Apps</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/digital-audio-video.do" class="title">Audio &amp; Video</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/digital-audio-video.do" class="category">Audio &amp; Video</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/digital-audio-video/digital-audio.do">Audio</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/digital-audio-video/digital-video.do">Video</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/business.do" class="title">Business</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/business.do" class="category">Business</a>
            </li><li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/business/accounting-finance.do">Accounting &amp; Finance</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/business/agile.do">Agile</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/business/business-management.do">Business Management &amp; Leadership</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/business/data-analysis.do">Data Analysis &amp; Visualization</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/business/project-management.do">Project Management</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/business/sales-marketing.do">Sales &amp; Marketing</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/business/sem-seo.do">SEM &amp; SEO</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/certification-training.do" class="title">Certification</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/certification-training.do" class="category">Certification</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/certification-training/cisco-certification.do">Cisco Certification</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/certification-training/linux-certification.do">Linux Certification</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/certification-training/microsoft-certification-training.do">Microsoft Certification &amp; Training</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/certification-training/pmp.do">PMP</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/certification-training/other-certification.do">Other Certification</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/data.do" class="title">Data</a>
          <ul class="horizontal" style="width:370px;" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/data.do" class="category">Data</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/data/data-analysis-visualization.do">Data Analysis &amp; Visualization</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/data/data-topics.do">Data Topics</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/data/non-relational-databases.do">Non-Relational Databases</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/data/oracle.do">Oracle</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/data/relational-databases.do">Relational Databases</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/data/sql-server.do">SQL Server</a></li>

            <li class="ad data">
              <div style="margin:215px 75px 0 20px;">
                <p class="fsxl fwb fc-light" style="margin-bottom:5px;"><a href="http://oreilly.com/category/get/data-science-kit.do" class="fc-light">Data Science Starter Kit</a></p>
                <p class="fsl fc-light">This kit includes everything you need, from analysis and visualization to management.</p>

                <div style="margin-right:147px; margin-top:30px;">
                  <ul class="fc-light mb" style="list-style-type:disc; padding-left:18px;">
                    <li style="margin-bottom:5px; display:list-item;">Python for Data Analysis</li>
                    <li style="margin-bottom:5px; display:list-item;">Machine Learning for Hackers</li>
                    <li style="margin-bottom:5px; display:list-item;">R Cookbook</li>
                    <li style="margin-bottom:5px; display:list-item;">R in a Nutshell, 2nd Edition</li>
                    <li style="margin-bottom:5px; display:list-item;"><a href="http://oreilly.com/category/get/data-science-kit.do" class="fwb fc-light" style="padding:0 !important; color:#fff !important;">and 4 more &gt;</a></li>
                  </ul>

                  <p class="fsl fwb fc-light">Get all 8 ebooks for just $99.99, a 60% savings.</p>
                  <a class="btn-green-arrow mb" href="http://oreilly.com/category/get/data-science-kit.do"><span class="arrow">See the Full Kit</span></a>
                </div>
              </div>
            </li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/design.do" class="title">Design</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/design.do" class="category">Design</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/design/animation.do">Animation</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/design/design-apps.do">Design Apps</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/design/digital-publishing.do">Digital Publishing</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/design/game-design.do">Game Design</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/design/information-architecture.do">Information Architecture</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/design/mobile-design.do">Mobile Design</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/design/prod-design.do">Product Design</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/design/user-experience.do">User Experience</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/design/web-design.do">Web Design</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/diy.do" class="title">DIY</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/diy.do" class="category">DIY</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/diy/diy-projects.do">DIY Projects</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/diy/electronics.do">Electronics</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/diy/hardware-hacking.do">Hardware Hacking</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/diy/lego-robotics.do">Lego &amp; Robotics</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/diy/make-craft.do">Make &amp; Craft</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/science-math.do" class="title">Engineering, Math, &amp; Science</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/science-math.do" class="category">Engineering, Math, &amp; Science</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/science-math/bioinformatics.do">Bioinformatics</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/science-math/electrical-engineering.do">Electrical Engineering</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/science-math/hardware-engineering.do">Hardware Engineering</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/science-math/math.do">Math</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/science-math/science.do">Science</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/health.do" class="title">Health &amp; Wellness</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/health.do" class="category">Health &amp; Wellness</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/health/cancer.do">Cancer</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/health/disorders-diseases.do">Disorders &amp; Diseases</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/health/health-it.do">Health IT</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/health/mind-body.do">Mind &amp; Body</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/microsoft.do" class="title">Microsoft</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/microsoft.do" class="category">Microsoft</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/microsoft/dotnet.do">.NET &amp; Windows Programming</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/microsoft/business-solutions.do">Microsoft Business Solutions</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/microsoft/certification-training.do">Microsoft Certification &amp; Training</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/microsoft/servers.do">Microsoft Servers</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/microsoft/software-development.do">Microsoft Software Development</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/microsoft/webdesign.do">Microsoft Web Design &amp; Development</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/microsoft/office-sharepoint.do">Office &amp; Sharepoint</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/microsoft/windows.do">Windows</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/microsoft/windows-administration.do">Windows Administration</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/microsoft/windows-phone.do">Windows Phone</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/microsoft/windows-phone-programming.do">Windows Phone Programming</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/mobile-devices.do" class="title">Mobile &amp; Ereader Devices</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/mobile-devices.do" class="category">Mobile &amp; Ereader Devices</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/mobile-devices/android.do">Android</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/mobile-devices/ipad-iphone-ipod.do">iPad, iPhone, &amp; iPad</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/mobile-devices/kindle.do">Kindle</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/mobile-devices/nook.do">Nook</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/mobile-devices/windows-phone.do">Windows Phone</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/mobile-devices/other-devices.do">Other Devices</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/networking.do" class="title">Networking</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/networking.do" class="category">Networking</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/networking/cisco.do">Cisco</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/networking/cloud-network-security.do">Cloud &amp; Network Security</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/networking/home-networking.do">Home Networking</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/networking/network-administration.do">Network Administration</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/networking/networking-topics.do">Networking Topics</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/personal-computing.do" class="title">Personal Computing</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/personal-computing.do" class="category">Personal Computing</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/personal-computing/home-networking.do">Home Networking</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/personal-computing/mac.do">Mac</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/personal-computing/pc.do">PC</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/personal-computing/windows.do">Windows</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/personal-growth.do" class="title">Personal Growth</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/personal-growth.do" class="category">Personal Growth</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/personal-growth/business-management-leadership.do">Business Management &amp; Leadership</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/personal-growth/career-development.do">Career Development</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/personal-growth/mind-body.do">Mind &amp; Body</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/personal-growth/personal-finance.do">Personal Finance</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/digital-photography.do" class="title">Photography</a>
          <ul class="horizontal" style="width:370px;" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/digital-photography.do" class="category">Photography</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/digital-photography/camera-guides.do">Camera Guides</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/digital-photography/digital-photography.do">Digital Photography</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/digital-photography/photoshop.do">Photoshop &amp; Photo Apps</a></li>

            <li class="ad photography">
              <div style="margin:388px 0 0 20px;">
                <a class="btn-green-arrow mb" href="http://oreilly.com/product/9781937538309.do"><span class="arrow">Find Inspiration</span></a>
                <p class="fsxl nm fwb fc-light clear"><a href="http://oreilly.com/product/9781937538309.do" class="fc-light">Photographic Visions</a></p>
                <p class="fsl fc-light">By 1x.com</p>
              </div>
            </li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/programming.do" class="title">Programming</a>
          <ul class="horizontal" style="width:425px;" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/programming.do" class="category">Programming</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/programming/dotnet.do">.NET &amp; Windows</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/programming/agile.do">Agile</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/programming/android-programming.do">Android</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/programming/apple-programming.do">Apple</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/programming/c.do">C/C++</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/programming/csharp.do">C#</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/programming/design-patterns.do">Design Patterns</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/programming/graphics-multimedia-programming.do">Graphics &amp; Multimedia</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/programming/ios-programming.do">iOS</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/programming/java.do">Java</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/programming/javascript.do">JavaScript</a></li>
            <li class="split" style="position: relative; z-index: 10; margin-top: -282.5712890625px; margin-left: 215px;" role="menuitem"><a href="http://oreilly.com/category/browse-subjects/programming/perl.do">Perl</a></li>
            <li role="menuitem" style="margin-left: 215px;"><a href="http://oreilly.com/category/browse-subjects/programming/php.do">PHP</a></li>
            <li role="menuitem" style="margin-left: 215px;"><a href="http://oreilly.com/category/browse-subjects/programming/python.do">Python</a></li>
            <li role="menuitem" style="margin-left: 215px;"><a href="http://oreilly.com/category/browse-subjects/programming/r.do">R</a></li>
            <li role="menuitem" style="margin-left: 215px;"><a href="http://oreilly.com/category/browse-subjects/programming/ruby.do">Ruby &amp; Rails</a></li>
            <li role="menuitem" style="margin-left: 215px;"><a href="http://oreilly.com/category/browse-subjects/programming/secure-programming.do">Secure</a></li>
            <li role="menuitem" style="margin-left: 215px;"><a href="http://oreilly.com/category/browse-subjects/programming/software-engineering.do">Software Engineering</a></li>
            <li role="menuitem" style="margin-left: 215px;"><a href="http://oreilly.com/category/browse-subjects/programming/testing.do">Testing</a></li>
            <li role="menuitem" style="margin-left: 215px;"><a href="http://oreilly.com/category/browse-subjects/programming/windows-phone-programming.do">Windows Phone</a></li>
            <!-- li role="menuitem"><a href="/category/browse-subjects/programming/other-programming-languages.do">Other Languages</a></li -->

            <li class="ad programming">
              <div style="margin:350px 10px 0 180px;">
                <p class="fsl">Want to write your server-side code in the same language you write front-end code?</p>
                <a href="http://oreilly.com/product/9780987332103.do"><img src="./Programming Python Confirmed Errata  --fulll_files/9780987332103-bkt.gif" class="floatl mr" style="margin-top:3px;"></a>
                <p class="fsl fc-highlight nm">Now Available!</p>
                <p class="fsxl fwb"><a href="http://oreilly.com/product/9780987332103.do" class="fc-dark">Jump Start Node.js</a></p>
                <a class="btn-green-arrow small" href="http://oreilly.com/product/9780987332103.do"><span class="arrow">Learn More</span></a>
              </div>
            </li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/security.do" class="title">Security &amp; Cryptography</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/security.do" class="category">Security &amp; Cryptography</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/security/cloud-network-security.do">Cloud &amp; Network Security</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/security/computer-security.do">Computer Security</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/security/cryptography.do">Cryptography</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/security/secure-programming.do">Secure Programming</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/system-administration.do" class="title">System Administration</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/system-administration.do" class="category">System Administration</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/system-administration/cloud-administration.do">Cloud Administration</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/system-administration/email-administration.do">Email Administration</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/system-administration/linux-unix.do">Linux &amp; Unix</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/system-administration/microsoft-servers.do">Microsoft Servers</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/system-administration/performance.do">Performance</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/system-administration/system-admin-ops.do">System Admin &amp; Ops</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/system-administration/windows-administration.do">Windows Administration</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/tech-culture.do" class="title">Tech Culture</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/tech-culture.do" class="category">Tech Culture</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/tech-culture/game-strategy.do">Game Strategy</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/tech-culture/tech-culture.do">Tech Culture</a></li>
          </ul>
        </li>
        <li class="sub" aria-haspopup="true" role="menuitem">
          <a href="http://oreilly.com/category/browse-subjects/web-development.do" class="title">Web Development</a>
          <ul class="horizontal" role="menu">
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/web-development.do" class="category">Web Development</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/web-development/html-css.do">HTML &amp; CSS</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/web-development/javascript.do">JavaScript</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/web-development/performance.do">Performance</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/web-development/php.do">PHP</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/web-development/ruby-rails.do">Ruby &amp; Rails</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/web-development/sem-seo.do">SEM &amp; SEO</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/web-development/web-content-management.do">Web Content Management</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/web-development/web-design.do">Web Design</a></li>
            <li role="menuitem"><a href="http://oreilly.com/category/browse-subjects/web-development/web-development.do">Web Development</a></li>
          </ul>
        </li>
      </ul>
    </li>
    <li role="menuitem"><a href="http://oreilly.com/category/new.do">New</a></li>
    <li role="menuitem"><a href="http://oreilly.com/category/upcoming.do">Upcoming</a></li>
    <li role="menuitem"><a href="http://oreilly.com/category/early-release.do">Early Release</a></li>
    <li role="menuitem"><a href="http://oreilly.com/category/bestselling.do">Bestselling</a></li>
    <li role="menuitem"><a href="http://oreilly.com/category/ebooks.do">Ebooks</a></li>
    <li role="menuitem" class="no-divider"><a href="http://oreilly.com/category/videos.do">Videos</a></li>

    <li class="contact vcard">
        <span class="tel">1-800-998-9938</span> / <span class="tel">707-827-7000</span> / <a class="email" href="mailto:orders@oreilly.com">orders@oreilly.com</a>
    </li>
  </ul>
  

  

  


  

  


</nav> 
  


			</div> <!--CatNav End-->
		</td>
	</tr>

	<tr valign="top">
		<td>


<div id="content-09">







<!-- Global Include -->

<div id="globalInclude" class="orm">
<div class="mb ml">

<!-- Ebooks -->
<a href="http://shop.oreilly.com/category/ebooks.do" onclick="var s=s_gi(s_account); s.products=&#39;;orm-store-global&#39;; s.eVar23=&#39;orm-store-global&#39;; s.events=&#39;event5&#39;; s.linkTrackVars=&#39;eVar23,products,events&#39;; s.linkTrackEvents=&#39;event5&#39;; s.tl(this,&#39;o&#39;,&#39;Ad Click&#39;);">






<img src="./Programming Python Confirmed Errata  --fulll_files/global-ebook-advantage-20130426.png" width="974" height="51" alt="">



</a>
</div></div>


<!-- build errata submission form  -->
<div id="fullcontent">

<a href="http://shop.oreilly.com/product/9780596158118.do"><img src="./Programming Python Confirmed Errata  --fulll_files/icon.gif" class="aleft" alt="Programming Python"></a>
<h1 id="topic">Errata for <em>Programming Python</em></h1>

<div id="errata">


<div style="float:right;width:60px;">
<script type="text/javascript">
document.write("<a href='javascript:window.print()' class='printbutton'>Print <img src='http://cdn.oreilly.com/news/images/printtag.jpg' alt='Print Icon' height='18' width='18' /></a>");
</script><a href="javascript:window.print()" class="printbutton">Print <img src="./Programming Python Confirmed Errata  --fulll_files/printtag.jpg" alt="Print Icon" height="18" width="18"></a>
</div>


<p><a href="http://www.oreillynet.com/cs/catalog/create/errata/?b=4650" title="Errata Form">Submit your own errata for this product</a>.</p>




<br>

<div id="tabs">
<ul>
<li><a class="current" href="./Programming Python Confirmed Errata  --fulll_files/Programming Python Confirmed Errata  --fulll.htm">Confirmed Errata</a></li>
<li><a href="http://oreilly.com/catalog/errataunconfirmed.csp?isbn=9780596158118">Unconfirmed Errata</a></li>
</ul>
</div>

<p>The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".</p>

<p>The following errata were submitted by our customers and approved as valid errors by the author or editor. </p>

<hr noshade="1" size="1">


<p class="colorkey"><b>Color Key:</b> <span class="serioustechnical">Serious Technical Mistake</span> <span class="minortechnical">Minor Technical Mistake</span> <span class="language">Language or formatting error</span> <span class="typo">Typo</span> <span class="question">Question</span> <span class="note">Note</span> <span class="update">Update</span></p>
<br><br>
<table cellpadding="5" cellspacing="0" border="1" width="920">
<tbody><tr>
<th>Version</th>

<th>Location</th>

<th>Description</th>
<th>Submitted&nbsp;By</th>

<th><a href="http://oreilly.com/catalog/errata.csp?isbn=9780596158118&order=date">Date&nbsp;Submitted</a></th>

<th>Date Corrected</th>
</tr><tr class="typo">
<td valign="top">PDF, Other Digital Version</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page xxviii<br>
at top of page in continuation of previous paragraph</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">"Only a fraction of Python users must care about linking in C libraries
today, and those who do already have the skills required to read the larger and
more ***compete*** example of integration present in the source code of Python itself."

Type at ***, suppose to be complete?  It's in pdf and epub that I just got.</p>
<p class="pre-wrap"><b>Note from the Author or Editor:</b><br>Yes - a typo.  Please fix in reprints.</p></div>
</td>
<td valign="top">Anonymous&nbsp;</td>
<td valign="top">Dec 16, 2010&nbsp;</td>
<td valign="top">May 13, 2011</td>
</tr><tr class="typo">
<td valign="top">, Printed, PDF, Safari Books Online, Other Digital Version</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page xxviii<br>
line 3 from page top</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">[Feb-1-11] Page xxviii, line 3 from page top: two typos in same sentence

This text's "larger and more compete example" should be "larger and more complete examples".
</p>
</div>
</td>
<td valign="top"><a href="http://www.oreillynet.com/pub/au/446">Mark Lutz</a><br><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Author" src="./Programming Python Confirmed Errata  --fulll_files/badge_author.gif" alt="O&#39;Reilly Author" width="14" height="14" style="padding-right:5px;"></a><!-- 1 --><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Blogger" src="./Programming Python Confirmed Errata  --fulll_files/badge_blogger.gif" alt="O&#39;Reilly Blogger" width="14" height="14" style="padding-right:5px;"></a>&nbsp;</td>
<td valign="top">Feb 02, 2011&nbsp;</td>
<td valign="top">May 13, 2011</td>
</tr><tr class="note">
<td valign="top">Printed, PDF, ePub, Mobi, Safari Books Online, Other Digital Version</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page N/A<br>
N/A</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">There is a new patch for running PyMailGUI under Python 3.3, which fixes a display issue for non-ASCII email address names introduced by an incompatible change in Python's email package.  For details and the simple patch, please see:

    http://rmi.net/~lutz/pp4e-updates.html#py33emailfix
</p>
</div>
</td>
<td valign="top"><a href="http://www.oreillynet.com/pub/au/446">Mark Lutz</a><br><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Author" src="./Programming Python Confirmed Errata  --fulll_files/badge_author.gif" alt="O&#39;Reilly Author" width="14" height="14" style="padding-right:5px;"></a><!-- 1 --><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Blogger" src="./Programming Python Confirmed Errata  --fulll_files/badge_blogger.gif" alt="O&#39;Reilly Blogger" width="14" height="14" style="padding-right:5px;"></a>&nbsp;</td>
<td valign="top">Sep 15, 2013&nbsp;</td>
<td valign="top"></td>
</tr><tr class="minortechnical">
<td valign="top">Printed, PDF, Safari Books Online, Other Digital Version</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page 12<br>
5th Python prompt</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">Python prompt has two angled-brackeds, instead of three:
  &gt;&gt; bob2['job'][-1]
should read:
  &gt;&gt;&gt; bob2['job'][-1]
</p>
<p class="pre-wrap"><b>Note from the Author or Editor:</b><br>Yes -- add an extra "&gt;" to the "&gt;&gt;" prompt here (it should be "&gt;&gt;&gt;").</p></div>
</td>
<td valign="top">Daniel D�az&nbsp;</td>
<td valign="top">Mar 24, 2011&nbsp;</td>
<td valign="top">Nov 11, 2011</td>
</tr><tr class="typo">
<td valign="top">Printed</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page 21<br>
Example 1-7 heading</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">The Example 1-7 heading lists the filename as update-db-pickle.py when it should be update_db_pickle.py.</p>
<p class="pre-wrap"><b>Note from the Author or Editor:</b><br>Yes -- fix as described (use underscores instead of dashes to match the file's name in later interaction).</p></div>
</td>
<td valign="top">Brad Trotter&nbsp;</td>
<td valign="top">May 24, 2011&nbsp;</td>
<td valign="top">Nov 11, 2011</td>
</tr><tr class="note">
<td valign="top">Printed</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page 38/39<br>
example 1-22</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">example 1-22 peopleinteract_update.py: Neither my typed code nor the cut and paste code from the online example code at O'reilly produce the result printed in the paperback edition. This code contains both formatting errors and logic errors.</p>
<p class="pre-wrap"><b>Note from the Author or Editor:</b><br>This reflects a bug in Python 3.2.0, not in the book's examples.  Please see:

  http://www.rmi.net/~lutz/lp4e-updates-notes-recent.html#py320inputbug

for details.  In short, Python's input() built-in is broken in 3.2.0 (3.2) when used in Windows console mode only.  This built-in has been fixed in later Python releases.  The quickest fix is to upgrade to 3.2.1 or later, or try a different environment; examples in the book which use input() work fine in all other Python versions and in most other contexts such as IDLE. </p></div>
</td>
<td valign="top">Charles Wehrenberg&nbsp;</td>
<td valign="top">Dec 14, 2011&nbsp;</td>
<td valign="top"></td>
</tr><tr class="note">
<td valign="top">Printed</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page 63, 67<br>
markup code</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">Because of the evolving html standard, as of the publication for the fourth edition of this book, the html table elements (&lt;tr&gt;, &lt;th&gt;, &lt;td&gt;) should specify closing code (&lt;/tr&gt;, &lt;/th&gt;, &lt;/td&gt;.</p>
<p class="pre-wrap"><b>Note from the Author or Editor:</b><br>[No change required]  The book states clearly that it omits some HTML tags on purpose for simplicity and space.  I agree with this poster's point in principle, but it doesn't merit changes in the book given its explicit and broad statements on this point.</p></div>
</td>
<td valign="top">charlie@solozone.com&nbsp;</td>
<td valign="top">Dec 01, 2011&nbsp;</td>
<td valign="top"></td>
</tr><tr class="minortechnical">
<td valign="top">Printed</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page 152<br>
2nd example</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">Reads
bytes = file.read()
values = struct.unpack('&gt;&gt;i4shf', data)

NameError: name 'data' is not defined

Should read as
data = file.read()
values = struct.unpack('&gt;&gt;i4shf', data)
</p>
<p class="pre-wrap"><b>Note from the Author or Editor:</b><br>Yes -- change as described: page 152, 2nd code listing, line 4 should read as follows (change "bytes" at the end to "data"):

values = struct.unpack('&gt;&gt;i4shf', data)

The code actually works as is if you keep typing all the code on this page in sequence (as I must have done), because "data" is what we called the byte string when it was written to the file; that is, "data" from the first interaction is the same as the "bytes" read off the file in the second interaction.  This wasn't the intent, though.</p></div>
</td>
<td valign="top">Bob Sanford&nbsp;</td>
<td valign="top">May 24, 2011&nbsp;</td>
<td valign="top">Nov 11, 2011</td>
</tr><tr class="note">
<td valign="top">Printed</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page 152<br>
first example; second line</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">Running Python 3.2.2 on Win 7 machine

EXISTING
data = struct.pack('&gt;i4shf', 2, 'spam', 3, 1.234)
NEEDS BINARY b &amp; SHOULD READ
data = struct.pack('&gt;i4shf', 2, b'spam', 3, 1.234)


this correction is suggested by the values = return in the second example.</p>
<p class="pre-wrap"><b>Note from the Author or Editor:</b><br>This reflects a recent change in Python 3.2, not a problem with the book examples.  In short, 3.2 has removed existing struct.pack functionality for str strings and the "s" type code, and now allows only bytes strings in this context.  In 3.2 and later, you must manually encode Unicode str to bytes prior to this tool, using str.encode() or bytes().  

This change also impacts some examples in Learning Python, and one example in Python Pocket Reference.  For more details, including the fix, please see this note on my book update pages (or its cross-post on Programming Python's updates page):

  http://www.rmi.net/~lutz/lp4e-updates-notes-recent.html#py32structchange

I can't post here about every change in Python that will impact the books over time, but this change seemed to merit a few words.
 </p></div>
</td>
<td valign="top">Charles Wehrenberg&nbsp;</td>
<td valign="top">Jan 07, 2012&nbsp;</td>
<td valign="top"></td>
</tr><tr class="question">
<td valign="top">Printed, PDF, ePub</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page 322<br>
code block 2</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">"C:\...\PP4E\Tools&gt; python find.py *.py .. | more"
It seems I have to quote "*.py" for this command to work in Linux. Didn't try Windows though. </p>
<p class="pre-wrap"><b>Note from the Author or Editor:</b><br>Changing this to a clarification, not an errata.  To address, change the very end of paragraph 2 on Page 322 from:
   "...standard input stream:"
to:
   "...standard input stream (remember to quote the "*.py" on Unix and Linux shells only, to avoid premature pattern expansion):"

[DISCUSSION ONLY FOLLOWS]
The report is correct about needing to quote some command-line arguments on Linux (only), and this does merit a note here.  This finder directory tree search script matches the passed-in "*.py" pattern itself, so we don't want a Linux shell to do expansion before it's passed in.

However, shell differences are mentioned elsewhere; this book runs all its examples on Windows, where this isn't an issue; and the book cannot note shell differences at each command where syntax diverges without becoming a shell programming guide too.

On this specific point, the following text appears on Page 106 (before the command line in question) in an early section devoted to command lines in general:
"""
(portability note: you may need to add quotes around the *.py in this and other command-line examples to prevent it from being expanded in some Unix shells):
"""
Moreover, Unix shell globbing behavior is also described on the earlier Page 166, and the closer Page 320-321.  

Both linear readers of the book and Linux users in general should probably be aware of the issue well enough to argue against redundant warnings throughout an already large text (and quoting arguments in general for Linux readers would likely confuse others with less command-line experience to draw from).

Nevertheless it's worth adding the text in the book and retaining this note as a reminder for Linux readers here -- thanks for the report. </p></div>
</td>
<td valign="top">Yang Lifu&nbsp;</td>
<td valign="top">Sep 09, 2013&nbsp;</td>
<td valign="top"></td>
</tr><tr class="question">
<td valign="top">Printed, PDF, ePub, Mobi, Safari Books Online</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page 631<br>
Source code def configBorders</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">The method of setting a window icon as used in the generic _window class, does not work on linux. This seems to be part because the .ico file is only for windows and part because tk has a hard time decoding any image file. Following code seems to work:

root = Tk()
img = PhotoImage(file='your-icon')
root.tk.call('wm', 'iconphoto', root._w, img)</p>
<p class="pre-wrap"><b>Note from the Author or Editor:</b><br>[Changing this report's type from minor technical mistake to clarification, and no change is required: informational only.]

It's true that Windows ".ico" files won't generally work on Linux, but:

1) This is pretty clearly explained in a big paragraph on page 424, where tk's iconbitmap call is first covered in depth, and mentioned parenthetically on page 44 at a preview example (plus, the book makes its use of Windows for running examples explicit throughout).

2)  The _window class on Page 631 referred to in this post should not cause its clients to fail on Linux, as it wraps the icon call in a exception handler and simply ignores the error on other platforms (to be verified, but it should only skip the custom window icon step and continue).

So, this isn't an errata per se; the example works as shown, and requires tweaking outside Windows for custom icons as described in the book.  That's one of the unavoidable platform dependencies of GUIs, and it wasn't possible to cover every variant.

That said, I'm retaining this note here as a constructive and useful pointer for other Linux readers who may want to use a custom window icon too; thanks for the suggestion.

On Linux, you'll probably also want to customize the _window class's iconpatt string, used to search for an icon file automatically if none is passed in (see the code: it's "'*.ico" as is).
</p></div>
</td>
<td valign="top">Rob van der Most&nbsp;</td>
<td valign="top">Oct 06, 2013&nbsp;</td>
<td valign="top"></td>
</tr><tr class="typo">
<td valign="top">, Printed, PDF, Safari Books Online, Other Digital Version</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page 678<br>
line 3 of last paragraph on page</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">[Feb-1-11] Page 678 in Chapter 11, line 3 of last paragraph on page, figure description off

The text misstates Figure 11-4's content here: it does not show a Clone window (the original version of this screenshot did, but was retaken very late in the project to show Grep dialogs with different Unicode encodings). To fix, change this line's "a window and its clone" to read "a main window". 
</p>
</div>
</td>
<td valign="top"><a href="http://www.oreillynet.com/pub/au/446">Mark Lutz</a><br><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Author" src="./Programming Python Confirmed Errata  --fulll_files/badge_author.gif" alt="O&#39;Reilly Author" width="14" height="14" style="padding-right:5px;"></a><!-- 1 --><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Blogger" src="./Programming Python Confirmed Errata  --fulll_files/badge_blogger.gif" alt="O&#39;Reilly Blogger" width="14" height="14" style="padding-right:5px;"></a>&nbsp;</td>
<td valign="top">Feb 02, 2011&nbsp;</td>
<td valign="top">May 13, 2011</td>
</tr><tr class="minortechnical">
<td valign="top">, Printed, PDF, Safari Books Online, Other Digital Version</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page 702 and 704<br>
see detailed description</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">[For a detailed description of this item, as well as the
correct whitespace in the patch, please see: 
  http://www.rmi.net/~lutz/pp4e-updates.html#closenote 
  http://www.rmi.net/~lutz/pp4e-updates.html#closepatch
]

[Feb-1-11] Page 702 and 704, PyEdit: add text.focus() calls after askstring() Unicode popups

For convenience, and per the detailed description above, we should add a call to reset focus back to the text widget after the Unicode encoding prompt popups which may be issued on Open and Save/SaveAs requests (depending on texconfig settings). As is, the code works, but requires the user to click in the text area if they wish to resume editing it immediately after the Unicode popup is dismissed; this standard popup itself should probably restore focus, but does not. To fix, add focus calls in two places. First, on page 702, at code line 21 at roughly mid page, change:

            if askuser:
                try:
                    text = open(file, 'r', encoding=askuser).read()

to the following, adding the new first line (the rest of this code is unchanged):

            self.text.focus() # else must click
            if askuser:
                try:
                    text = open(file, 'r', encoding=askuser).read()

Second, on page 704, at code line 8 near top of page, similarly change:

            if askuser:
                try:
                    text.encode(askuser)

to the following, again just adding the new first line:

            self.text.focus() # else must click
            if askuser:
                try:
                    text.encode(askuser)

Reprints: please let me know if there is not enough space for the inserts; I'd rather avoid altering page breaks in the process. This patch will also be applied to future versions of the book's examples package; in the package, the code in question is in file PP4E\Gui\TextEditor\textEditor.py, at lines 298 and 393. </p>
</div>
</td>
<td valign="top"><a href="http://www.oreillynet.com/pub/au/446">Mark Lutz</a><br><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Author" src="./Programming Python Confirmed Errata  --fulll_files/badge_author.gif" alt="O&#39;Reilly Author" width="14" height="14" style="padding-right:5px;"></a><!-- 1 --><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Blogger" src="./Programming Python Confirmed Errata  --fulll_files/badge_blogger.gif" alt="O&#39;Reilly Blogger" width="14" height="14" style="padding-right:5px;"></a>&nbsp;</td>
<td valign="top">Feb 02, 2011&nbsp;</td>
<td valign="top">May 13, 2011</td>
</tr><tr class="minortechnical">
<td valign="top">, Printed, PDF, Safari Books Online</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page 963, 970<br>
Page 963 line 9, and page 970 line 4</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">Page 963 line 9, and page 970 line 4: add timeout arguments to email server connect calls

For robustness, add "timeout=15" arguments to the POP and SMTP connect calls, so that email clients don't hang when email servers fail to respond.  In the book, change code line 9 on page 963 from the first of the following to the second:
 
        server = smtplib.SMTP(self.smtpServerName)           # this may fail too
        server = smtplib.SMTP(self.smtpServerName, timeout=15)  # this may fail too

Similarly, change code line 4 on page 970 from the first of the following to the second: 

        server = poplib.POP3(self.popServer)
        server = poplib.POP3(self.popServer, timeout=15)

In the book examples package, these changes would be applied to line 153 of mailSender.py, and line 34 of file mailFetcher.py, both of which reside in directory PP4E\Internet\Email\mailtools. They'll be patched in a future examples package version. 

Not a bug, but a desired enhancement.  For more background on this, see my updates page:
http://www.rmi.net/~lutz/pp4e-updates.html#timeoutnote
</p>
</div>
</td>
<td valign="top"><a href="http://www.oreillynet.com/pub/au/446">Mark Lutz</a><br><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Author" src="./Programming Python Confirmed Errata  --fulll_files/badge_author.gif" alt="O&#39;Reilly Author" width="14" height="14" style="padding-right:5px;"></a><!-- 1 --><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Blogger" src="./Programming Python Confirmed Errata  --fulll_files/badge_blogger.gif" alt="O&#39;Reilly Blogger" width="14" height="14" style="padding-right:5px;"></a>&nbsp;</td>
<td valign="top">Feb 22, 2011&nbsp;</td>
<td valign="top">May 13, 2011</td>
</tr><tr class="update">
<td valign="top">, Printed, PDF, Safari Books Online, Other Digital Version</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page 978, 964<br>
mid page (see description)</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">[Oct-20-11] Pages 978 and 964, encode and decode i18n attachment filenames for display, save, send

Per the detailed description at http://www.rmi.net/~lutz/pp4e-updates.html#filenamespatch, the following two changes will support both receipt and send of encoded i18n attachment filenames, assuming that such non-ASCII filenames are valid on the underlying platform (Windows is very liberal in this regard). 

First, on Page 978, change the very last line of the partName method def statement from the first of these to the second (this is mid page at code line 26, in file PP4E\Internet\Email\mailtools\mailParser.py -- be careful of indentation of the code and its "#" comment which is given more exactly in the detailed description named above):

        return (filename, contype)

        return (self.decodeHeader(filename), contype) # oct 2011: decode i18n fnames

Second, on Page 964, change the 5th and 4th last lines of the addAttachments method def statement from the first of these to the second (this is mid page line -22, in file P4E\Internet\Email\mailtools\mailSender.py):

            # set filename and attach to container
            basename = os.path.basename(filename)

            # set filename (ascii or utf8/mime encoded) and attach to container
            basename = self.encodeHeader(os.path.basename(filename))   # oct 2011

These were also patched in version 1.3 of the book examples package (PP4E-Examples-1.3.zip); see http://www.rmi.net/~lutz/pp4e-updates.html#pymailguiall for details.
</p>
</div>
</td>
<td valign="top"><a href="http://www.oreillynet.com/pub/au/446">Mark Lutz</a><br><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Author" src="./Programming Python Confirmed Errata  --fulll_files/badge_author.gif" alt="O&#39;Reilly Author" width="14" height="14" style="padding-right:5px;"></a><!-- 1 --><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Blogger" src="./Programming Python Confirmed Errata  --fulll_files/badge_blogger.gif" alt="O&#39;Reilly Blogger" width="14" height="14" style="padding-right:5px;"></a>&nbsp;</td>
<td valign="top">Oct 20, 2011&nbsp;</td>
<td valign="top">Nov 11, 2011</td>
</tr><tr class="minortechnical">
<td valign="top">, Printed, PDF, Safari Books Online, Other Digital Version</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page 1072<br>
code line 10 from top of page</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">[For a detailed description of this item, as well as the
correct whitespace in the patch, please see: 
  http://www.rmi.net/~lutz/pp4e-updates.html#closenote 
  http://www.rmi.net/~lutz/pp4e-updates.html#closepatch
]

[Feb-1-11] Page 1072, code line 10 from top of page, PyMailGUI: add a close() for HTML mail files

For portability, and per the detailed description above, we should add an explicit close() call to flush the temporary file of an HTML-only email before starting a web browser to view it, so that this code works in all contexts. As is, it works on the test platform used for the book, and likely works on most others, because the method in question exits and thus reclaims, closes, and flushes the file before the spawned web browser gets around to reading it. However, this is timing and platform dependent, and may fail on some machines that start browsers more quickly; its been seen to fail on a fast Vista machine. To fix in the book, change the middle line of the following three current code lines:

                  tmp = open(tempname, 'wb')      # already encoded
                  tmp.write(asbytes)
                  webbrowser.open_new('file://' + tempname)

to read as follows, adding the text that starts with the semicolon (I'm combining statements to avoid altering page breaks):

                  tmp = open(tempname, 'wb')      # already encoded
                  tmp.write(asbytes); tmp.close() # flush output now
                  webbrowser.open_new('file://' + tempname)

In the book's examples package, this code is located at line 209 in file PP4E\Internet\Email\PyMailGUI\ListWindows.py; it will be patched there too in a future examples package release (version 1.2, date TBD). 
</p>
</div>
</td>
<td valign="top"><a href="http://www.oreillynet.com/pub/au/446">Mark Lutz</a><br><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Author" src="./Programming Python Confirmed Errata  --fulll_files/badge_author.gif" alt="O&#39;Reilly Author" width="14" height="14" style="padding-right:5px;"></a><!-- 1 --><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Blogger" src="./Programming Python Confirmed Errata  --fulll_files/badge_blogger.gif" alt="O&#39;Reilly Blogger" width="14" height="14" style="padding-right:5px;"></a>&nbsp;</td>
<td valign="top">Feb 02, 2011&nbsp;</td>
<td valign="top">May 13, 2011</td>
</tr><tr class="typo">
<td valign="top">, Printed, PDF, Safari Books Online, Other Digital Version</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page 1226<br>
sidebar on page</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">[Feb-1-11] Page 1226, two filename typos in same sidebar

This will probably be obvious to most readers who inspect the external example files referenced here, but in this sidebar: "test-cgiu-uploads-bug*" should read "test-cgi-uploads-bug*", and the bullet item text "test-cgi-uploads-bug.html/py saves the input stream" should read "test-cgi-uploads-bug2.html/py saves the input stream". 

</p>
</div>
</td>
<td valign="top"><a href="http://www.oreillynet.com/pub/au/446">Mark Lutz</a><br><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Author" src="./Programming Python Confirmed Errata  --fulll_files/badge_author.gif" alt="O&#39;Reilly Author" width="14" height="14" style="padding-right:5px;"></a><!-- 1 --><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Blogger" src="./Programming Python Confirmed Errata  --fulll_files/badge_blogger.gif" alt="O&#39;Reilly Blogger" width="14" height="14" style="padding-right:5px;"></a>&nbsp;</td>
<td valign="top">Feb 02, 2011&nbsp;</td>
<td valign="top">May 13, 2011</td>
</tr><tr class="typo">
<td valign="top">, Printed, PDF, Safari Books Online, Other Digital Version</td>

<td valign="top"><div style="width: 111px; overflow: auto; height: auto;">Page 1555<br>
heading line at top of page</div></td>

<td valign="top" class="descript" width="430" style="width: 430px; padding: 5px; height: auto;"><div style="overflow: auto; width: 420px; height: auto;"><p class="pre-wrap">[Feb-1-11] Page 1555, top of page, quotes are misplaced in heading line

A typo inherited from the prior edition: the quotes and question mark in the heading line at the very top of this page are slightly off. Change the heading line: So What�s �Python: The Sequel�? to read as: �So What�s Python?�: The Sequel. 

This header refers back to the sidebar in the Preface titled "So What's Python?". Arguably trivial, as this sidebar was 1500 pages (and perhaps a few months) ago by this point in the book, but it would be better to get this right. This header was broken by a copyedit change on the prior edition, and fell through the cracks on this one.

</p>
</div>
</td>
<td valign="top"><a href="http://www.oreillynet.com/pub/au/446">Mark Lutz</a><br><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Author" src="./Programming Python Confirmed Errata  --fulll_files/badge_author.gif" alt="O&#39;Reilly Author" width="14" height="14" style="padding-right:5px;"></a><!-- 1 --><a href="http://oreilly.com/badges.html" target="popup" onclick="javascript:window.open(&#39;http://oreilly.com/badges.html&#39;, &#39;popup&#39;, &#39;width=300, height=300&#39;);"><img title="O&#39;Reilly Blogger" src="./Programming Python Confirmed Errata  --fulll_files/badge_blogger.gif" alt="O&#39;Reilly Blogger" width="14" height="14" style="padding-right:5px;"></a>&nbsp;</td>
<td valign="top">Feb 02, 2011&nbsp;</td>
<td valign="top">May 13, 2011</td>
</tr></tbody></table>


</div>

</div>





<!--footer -->
 
    <!--  -->
		</div></td>
	</tr>
	<tr>
		<td class="eightPixel">&nbsp;</td>
	</tr>
	<tr valign="bottom">
		<td align="center" class="navfooterbg"><!--BottomNav Start-->
			<table border="0" cellspacing="0" cellpadding="0" class="emailSignUpTable">
				<tbody><tr>
					<td style="width:516px;">

						<form method="GET" id="emailSignUp" action="http://post.oreilly.com/client/o/oreilly/forms/quicksignup.cgi"> 
							<table border="0" cellspacing="0" cellpadding="0" width="500"> 
								<tbody> 
									<tr> 
										<td width="275">
											<div style="padding-left: 12px;">Sign up today to receive special discounts,<br> product alerts, and news from O'Reilly.</div>
										</td>
										<td width="172">
											<input type="hidden" name="client_token" value="oreilly"><input type="hidden" name="subscribe" value="optin">
											<input type="hidden" name="success_url" value="http://oreilly.com/store/newsletter-thankyou.html"> 
											<input type="hidden" name="error_url" value="http://oreilly.com/store/newsletter-signup-error.html"> 
											<input type="hidden" name="news_oreilly" value="1">
											<input type="hidden" name="source" value="news_oreilly_footer">

											<input type="text" name="email_addr" value="Enter Email" maxlength="100" size="12" class="NavSearchBottom">
										</td>
										<td width="53">
											<input border="0" type="image" alt="Submit" src="./Programming Python Confirmed Errata  --fulll_files/emailsignup_btn.gif" name="submit" value="submit">
										</td>
									</tr>
								</tbody>
							</table>
						</form> 

					</td>
					<td>
						<a href="http://oreilly.com/oreilly/privacy.html">Privacy Policy &gt;</a><br>
						<a href="http://cdn.oreillystatic.com/oreilly/email/sample-newsletter.html" alt="View Sample Newsletter &gt;">View Sample Newsletter &gt;</a>
					</td>

<td style="text-align:right">
<ul class="utility social">
<li><a class="twitter" href="http://twitter.com/oreillymedia" target="_blank"><span class="hidden">Twitter</span></a></li>
<!--<li><a class="youtube" href="http://youtube.com/oreillymedia" target="_blank"><span class="hidden">YouTube</span></a></li>-->
<li><a class="youtube" href="http://www.youtube.com/subscription_center?add_user=oreillymedia" target="_blank"><span class="hidden">YouTube</span></a></li>
<li><a class="slideshare" href="http://slideshare.net/oreillymedia" target="_blank"><span class="hidden">Slideshare</span></a></li>
<li><a class="facebook" href="http://www.facebook.com/OReilly" target="_blank"><span class="hidden">Facebook</span></a></li>

<li><a class="rss" href="http://feeds.feedburner.com/oreilly/news" target="_blank"><span class="hidden">RSS</span></a></li>
<li><a class="all-rss" href="http://oreilly.com/feeds">View All RSS Feeds &gt;</a></li>
</ul>
</td>
				</tr>
			</tbody></table>
			<div id="multiColumnFooter">
				<div id="footer-branding">
					<img src="./Programming Python Confirmed Errata  --fulll_files/logo02.gif" alt="O&#39;reilly">
					<p class="copyright">© 2013, O’Reilly Media, Inc.</p>
					<p>
						<span class="phone-number">(707) 827-7019</span>
						<span class="phone-number">(800) 889-8969</span>
					</p>
					<p class="trademarks">All trademarks and registered trademarks appearing on oreilly.com are the property of their respective owners.</p>
				</div>
				<div class="contentSectionBlock">
					<div class="contentSectionContainer">
						<span id="footerColumn-1" class="contentSection">
							<h3>About O'Reilly</h3>
							<ul>
								<li><a class="footer" href="http://oreilly.com/academic/">Academic Solutions</a></li>
								<li><a class="footer" href="http://oreilly.com/jobs/">Jobs</a></li>
								<li><a class="footer" href="http://www.oreilly.com/about/contact.html">Contacts</a></li>
								<li><a class="footer" href="http://www.oreilly.com/about/index.html">Corporate Information</a></li>
								<li><a class="footer" href="http://press.oreilly.com/index.html">Press Room</a></li>
								<li><a class="footer" href="http://oreilly.com/oreilly/privacy.csp">Privacy Policy</a></li>
								<li><a class="footer" href="http://oreilly.com/terms/">Terms of Service</a></li>
								<li><a class="footer" href="http://oreilly.com/oreilly/author/intro.csp">Writing for O'Reilly</a></li>
							</ul>
						</span>
					</div><!--end contentSectionContainer-->
					<div class="contentSectionContainer">
						<span id="footerColumn-2" class="contentSection">
							<h3>Community</h3>
							<ul>
								<li><a class="footer" href="http://oreilly.com/authors/">Authors</a></li>
                                                                <li><a class="footer" href="http://oreilly.com/webcasts/">Webcasts</a></li>
								<li><a class="footer" href="http://oreilly.com/community/">Community &amp; Featured Users</a></li>
								<li><a class="footer" href="http://forums.oreilly.com/">Forums</a></li>								
								<li><a class="footer" href="http://elists.oreilly.com/">Newsletters</a></li>
								<li><a class="footer" href="http://answers.oreilly.com/">O'Reilly Answers</a></li>
								<li><a class="footer" href="http://oreilly.com/feeds/">RSS Feeds</a></li>
								<li><a class="footer" href="http://ug.oreilly.com/">User Groups</a></li>
                                                               <li><a class="footer" href="http://chimera.labs.oreilly.com/">O'Reilly Atlas (beta)</a></li>
							</ul>
						</span>
					</div><!--end contentSectionContainer-->
					<div class="contentSectionContainer">
						<span id="footerColumn-3" class="contentSection">
							<h3>Partner Sites</h3>
							<ul>
								<li><a class="footer" href="http://makezine.com/">makezine.com</a></li>
								<li><a class="footer" href="http://makerfaire.com/">makerfaire.com</a></li>
								<li><a class="footer" href="http://craftzine.com/">craftzine.com</a></li>
								<li><a class="footer" href="http://igniteshow.com/">igniteshow.com</a></li>
								<li><a class="footer" href="https://developer.paypal.com/">PayPal Developer Zone</a></li>
								<li><a class="footer" href="http://blogs.forbes.com/oreillymedia/">O'Reilly Insights on Forbes.com</a></li>
							</ul>
						</span>
					</div><!--end contentSectionContainer-->
					<div class="contentSectionContainer">
						<span id="footerColumn-4" class="contentSection">
							<h3>Shop O'Reilly</h3>
							<ul>
								<li><a class="footer" href="http://shop.oreilly.com/category/customer-service.do">Customer Service</a></li>
								<li><a class="footer" href="http://shop.oreilly.com/category/customer-service.do">Contact Us</a></li>
								<li><a class="footer" href="http://shop.oreilly.com/category/customer-service/shipping-information.do">Shipping Information</a></li>
								<li><a class="footer" href="http://shop.oreilly.com/category/customer-service/ordering-payment.do">Ordering &amp; Payment</a></li>
								<li><a class="footer" href="http://oreilly.com/affiliates/">Affiliate Program</a></li>							
								<li><a class="footer" href="http://shop.oreilly.com/category/customer-service/oreilly-guarantee.do">The O'Reilly Guarantee</a></li>
							</ul>
						</span>
					</div> <!--end contentSectionContainer-->
					<div style="clear:both;"></div>
				</div><!--end contentSectionBlock-->
			</div><!--end multiColumnFooter-->
		</td><!--BottomNav End-->
           </tr>
</tbody></table>

</div> <!-- / content-09-->
 <!-- / page-->

<script type="text/javascript" src="./Programming Python Confirmed Errata  --fulll_files/footerScripts.js"></script>




	
            <!-- MyBuys Page Initialization -->
            <script type="text/javascript">
              mybuys.initPage();
            </script><span id="mybuyscontainer" style="display:none"></span>
            <style type="text/css">
            .mbzone2 {width: 232px !important;}
            .mbzone2 .mbitem { width: 190px; !important;}
            </style>
	


<!-- autocomplete scripts - autocomplete_data.js updated 8/23/12 -cp -->
<script type="text/javascript" src="./Programming Python Confirmed Errata  --fulll_files/utilities.js"></script>
<script type="text/javascript" src="./Programming Python Confirmed Errata  --fulll_files/datasource-min.js"></script>
<script type="text/javascript" src="./Programming Python Confirmed Errata  --fulll_files/autocomplete-min.js"></script>
<script type="text/javascript" src="./Programming Python Confirmed Errata  --fulll_files/autocomplete_data.js"></script>  

<script type="text/javascript" src="./Programming Python Confirmed Errata  --fulll_files/plusone.js" gapi_processed="true"></script>	

<!-- sc/2109 -->
<script type="text/javascript">
var cbjspath = "static.chartbeat.com/js/chartbeat.js?uid=1632&domain=oreilly.com";
var cbjsprotocol = (("https:" == document.location.protocol) ? "https://s3.amazonaws.com/" : "http://");
document.write(unescape("%3Cscript src='"+cbjsprotocol+cbjspath+"' type='text/javascript'%3E%3C/script%3E"))
</script><script src="./Programming Python Confirmed Errata  --fulll_files/chartbeat.js" type="text/javascript"></script>

<!-- also crazyegg-->
<script type="text/javascript">
setTimeout(function(){var a=document.createElement("script");
var b=document.getElementsByTagName('script')[0];
a.src=document.location.protocol+"//dnn506yrbagrg.cloudfront.net/pages/scripts/0011/6381.js";
a.async=true;a.type="text/javascript";b.parentNode.insertBefore(a,b)}, 1);
</script>

<!-- #sc/2109 -->









</body></html>